#include <signal.h>
#include <iostream>
#include <unistd.h>

int g = 0;


void handler(int signo)
{
    std::cout << "get signal" << signo << std::endl;
    g = 1;
}

int main()
{
    signal(2,handler);
    while(!g)
    { ; }

    std::cout << "close" << std::endl;
    return 0;
}



























// void printpendsig(sigset_t& p)
// {
//     for(int i = 31 ; i > 0 ; i--)
//     {
//         if(sigismember(&p,i))
//         {
//             std::cout << 1 ;
//         }
//         else
//             std::cout << 0;
//     }
//     std::cout << std::endl;
// }

// int main()
// {
//     sigset_t p;
//     sigset_t act;
//     sigemptyset(&act);
//     sigaddset(&act,2);
//     sigaddset(&act,40);
//     sigprocmask( SIG_BLOCK,&act,NULL);
//     while(true)
//     {
//         sigpending(&p);
//         std::cout << "pid: "<<getpid() << " : "; 
//         printpendsig(p); 
//         sleep(1);
//     }
//     return 0;
// }










// void sigcb(int signo)
// {
//     std::cout << "get a signal : " << signo << std::endl;
//     sleep(3);
// }

// int main()
// {
//     struct sigaction act,oct;
//     act.sa_flags = 0;
//     act.sa_handler =sigcb;
//     sigemptyset(&act.sa_mask);
//     sigaddset(&act.sa_mask,SIGINT);

//     sigaction(SIGINT,&act,&oct);

//     while(true)
//     {
//         sleep(1);
//         std::cout << "pid: " << getpid() << std::endl;
//     }

//     return 0;
// }

// #include <iostream>
// #include <signal.h>
// #include <unistd.h>
// void sigcb(int signo)
// {
//     sleep(1);
//     std::cout << "get a signal : " << signo << std::endl;
// }

// int main()
// {
//     signal(SIGINT,sigcb);

//     while(true)
//     {
//         std::cout << "pid : " << getpid() << std::endl;
//         sleep(1);
//     }

//     return 0;
// }

// #include <iostream>
// #include <unistd.h>

// int sum(int start,int end)
// {
//     int sum = 0;
//     for(int i = start ; i <= end ; i++)
//     {
//         sum += i;
//         sum /= 0;  // core 
//     }
//     return sum;
// }

// int main()
// {
    
//     std::cout << "total : " << sum(0,100) << std::endl;

//     return 0;
// }

// #include <iostream>
// #include <unistd.h>
// #include <signal.h>

// void handler(int signo)
// {
//     std::cout << " get a signal" << signo << std::endl;
//     exit(1);
// }

// int main()
// {
//     struct sigaction act,oact;
//     act.sa_handler = handler;
//     sigemptyset(&act.sa_mask);
//     act.sa_flags = 0;
//     sigaction(2,&act,&oact);
//     while(true)
//     {
//         std::cout << "I am pid: " << getpid() << std::endl;
//         sleep(1);
//     }
//     return 0;
// }


// void hander(int signal)
// {

//     std::cout << "process exit , get code: " << signal << std::endl;
//     exit(0);
// }

// void printpendsig(sigset_t* p)
// {
//     for(int i = 1 ; i < 32 ; i++)
//     {
//         if(sigismember(p,i))
//         {
//             std::cout << "1";
//         }
//         else 
//         {
//             std::cout << "0";
//         }
//     }
//     std::cout<<std::endl;
// }

// int main()
// {
//     //捕获SIGINT
//     signal(SIGINT,hander);

//     //b: 屏蔽字    p: pending
//     sigset_t b,p;
//     sigemptyset(&b);
//     sigemptyset(&p);

//     //屏蔽SIGINT
//     sigaddset(&b,SIGINT);
//     sigprocmask(SIG_BLOCK,&b,NULL);

//     //5秒5结束屏蔽
//     int cnt = 0;

//     while(true)
//     {
//         sigpending(&p);

//         if(cnt++ == 5)
//         {
//             sigprocmask(SIG_UNBLOCK,&b,NULL);
//         }

//         printpendsig(&p);

//         sleep(1);
//     }

//     return 0;
// }



// void printsigset(sigset_t* set)
// {
//     for(int i = 1 ; i < 32 ; i++)
//     {
//         if(sigismember(set,i))
//         {
//             putchar('1');
//         }
//         else
//         {
//             putchar('0');
//         }
//     }
//     puts("");
// }

// int main()
// {
//     sigset_t s,p;
//     sigemptyset(&s);
//     sigaddset(&s,SIGINT);
//     sigprocmask(SIG_BLOCK,&s,NULL);
//     while(true)
//     {
//         sigpending(&p);
//         printsigset(&p);
//         sleep(1);
//     }
//     return 0;
// }


// void hander(int sig)
// {
//     std::cout << "get a signal : " << sig <<std::endl;
//     alarm(1);
// }

// int main()
// {
//     // for(int i = 0 ; i <= 31 ; i++)
//     signal(SIGALRM,hander);

//     // while(true)
//     // {
//     //     sleep(1);
//     //     std::cout << "hello " << "pid : " << getpid() << std::endl;

//     // }
//     int count = 0;
//     while(true)
//     {
//     alarm(1);

//         std::cout << count << std::endl;
//         count++;
//         sleep(1);
//     }

//     return 0;
// }